home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / GEMERROR.I < prev    next >
Encoding:
Modula Implementation  |  1994-01-17  |  27.2 KB  |  622 lines

  1. IMPLEMENTATION MODULE GEMError;
  2. (*$B+,Y+,M-,S-,R-*)
  3.  
  4. (*
  5.  * Hilfsmodul zum Abfangen und Anzeigen von Laufzeitfehlern.
  6.  * Außerdem werden alle Fehlertextvariablen mit deutschen Texten initialisiert.
  7.  *
  8.  * 25.10.88 TT  SysInitGem / CatchRemoval-Aufruf
  9.  * 07.11.88 TT  LoaderMsg [7] verbessert
  10.  * 17.06.89 TT  Fehler GenFPErr aufgenommen
  11.  * 19.08.89 TT  Fehler CaseSelectErr und NoErr aufgenommen
  12.  * 28.09.90 TT  'bye'-Funktion besser dokumentiert
  13.  * 17.01.94 TT  LoaderMsg [16] verbessert
  14.  *)
  15.  
  16. IMPORT MOSGlobals;
  17. FROM Storage IMPORT ALLOCATE;
  18. FROM SystemError IMPORT OutOfMemory;
  19. FROM MOSGlobals IMPORT MemArea, BusFault, OddBusAddr, NoValidRETURN, OutOfStack;
  20. FROM SysBuffers IMPORT HdlErrorStack;
  21. FROM AESForms IMPORT FormAlert;
  22. FROM GEMEnv IMPORT GemHandle, ExitGem, CurrGemHandle, SysInitApplication;
  23. FROM Strings IMPORT String, Pos, Delete, Assign, Insert, Concat, Copy, Length,
  24.         Empty, Space, Append, Upper;
  25. FROM SYSTEM IMPORT ASSEMBLER, LONGWORD, WORD, ADDRESS, BYTE, ADR;
  26. FROM SysTypes IMPORT ExcDesc, ScanDesc;
  27. FROM FileBase IMPORT CloseFile, HandleError;
  28. FROM Files IMPORT File, ResetState, Close, Remove, GetStateMsg, State,
  29.                 GetFileName;
  30. FROM StrConv IMPORT CardToStr, StrToLCard, IntToStr, LHexToStr;
  31. FROM PrgCtrl IMPORT TermProcess;
  32. FROM ResCtrl IMPORT RemovalCarrier, CatchRemoval;
  33. FROM HdlError IMPORT GetErrorMsg, ReleaseCatcher, SysCatchErrors;
  34. FROM ErrBase IMPORT RtnCond, ErrResp;
  35. FROM MOSConfig IMPORT LoaderMsg, RuntimeErrMsg, FileErrMsg;
  36. FROM ShellMsg IMPORT ScanMode, ScanAddr, TextName, ErrorMsg, DefPaths,
  37.         ModPaths, Active, ScanIndex, ImpPaths, SrcPaths;
  38. FROM GEMScan IMPORT InputScan, InitChain, CallingChain;
  39. FROM MOSCtrl IMPORT ModLevel;
  40. FROM SysCtrl IMPORT ExcToScanAddr;
  41.  
  42. VAR strVal:BOOLEAN;
  43.  
  44. PROCEDURE prepare (VAR msg: ARRAY OF CHAR; mayCont: BOOLEAN; index: CARDINAL;
  45.                    VAR mayEdit: BOOLEAN);
  46.   BEGIN
  47.     Insert ('[0][',0,msg,strVal);
  48.     Append ('][Quit',msg,strVal);
  49.     IF mayCont THEN
  50.       Append ('|Cont',msg,strVal)
  51.     END;
  52.     mayEdit:= Active & (ModLevel>1) & ~Empty (CallingChain [index].modName);
  53.     IF mayEdit THEN
  54.       Append ('|Scan',msg,strVal)
  55.     END;
  56.     Append (']',msg,strVal);
  57.   END prepare;
  58.  
  59.  
  60. (* Folgende Funktion fängt allgemeine Laufzeitfehler ab. *)
  61.  
  62. PROCEDURE bye(nr: INTEGER; msg: ARRAY OF CHAR; causer: ErrResp;
  63.               cont: RtnCond; VAR info: ExcDesc): BOOLEAN;
  64.   
  65.   VAR scan: ScanDesc;
  66.       msg1:ARRAY [0..133] OF CHAR; (* reicht f. 4 Zeilen *)
  67.       showAddr,
  68.       mayCont,
  69.       mayEdit: BOOLEAN;
  70.       defBut, index, button:CARDINAL;
  71.       relad:LONGCARD;
  72.       str,
  73.       mname:ARRAY [0..31] OF CHAR;
  74.   BEGIN
  75.     (* Fehlermeldung vorbereiten *)
  76.     IF Empty (msg) THEN  (* Wurde ein Text übergeben? *)
  77.       GetErrorMsg (nr,str) (* Nein, dann Standardtext verwenden *)
  78.     ELSE
  79.       Assign (msg,str,strVal)
  80.     END;
  81.     (* bei Bus- und Adreßfehlern soll auch die Zugriffsadr. angezeigt werden:*)
  82.     showAddr:= (nr=BusFault) OR (nr=OddBusAddr);
  83.     (* Scanner-Record vorbereiten: *)
  84.     ExcToScanAddr (info, scan);
  85.     (* Start-Tiefe bei Scanner-Anzeige festlegen *)
  86.     IF causer=callerCaused THEN
  87.       index:= 1
  88.     ELSE
  89.       index:= 0
  90.     END;
  91.     mayCont:= cont=mayContinue;
  92.     (*
  93.      * Nun Text für FormAlert-Meldung bei 'InputScan' vorbereiten
  94.      *)
  95.     IF showAddr THEN
  96.       Concat (str,'| auf ',msg1,strVal);
  97.       Append (LHexToStr(info.accessAddr,0),msg1,strVal)
  98.     ELSE
  99.       Assign (str,msg1,strVal)
  100.     END;
  101.     (* Aufruferkette erstellen *)
  102.     InitChain (scan);
  103.     (* Scanner starten *)
  104.     InputScan (msg1,index);
  105.     (*
  106.      * Nun Meldung "Quit|Cont|Scan" vorbereiten und anzeigen
  107.      *)
  108.     Append ( Space (22 - INTEGER (Length (str))), msg1, strVal);
  109.     prepare (msg1, mayCont, index, mayEdit);
  110.     FormAlert (1+ORD(mayEdit)+ORD(mayCont), msg1, button);
  111.     (*
  112.      * Zuletzt Programm beenden, fortführen oder Scanning des Compilers starten
  113.      *)
  114.     IF button = 2+ORD(mayCont) THEN (* Scan *)
  115.       (* f. Scanning des Compilers werden einige Vars gesetzt, damit *
  116.        * die Shell bei Programmrückkehr sofort die Aktion startet.   *)
  117.       ScanMode := TRUE;
  118.       ScanIndex:= index;
  119.       Assign (str,ErrorMsg,strVal);
  120.       TermProcess (nr)
  121.     ELSIF button = 1 THEN (* Quit *)
  122.       TermProcess (nr)
  123.     ELSE (* Cont *)
  124.       RETURN FALSE
  125.     END
  126.   END bye;
  127.  
  128.  
  129. (* Folgende Prozedur fängt Dateifehler ab. *)
  130.  
  131. PROCEDURE handleError0 (VAR f:File; errNo: INTEGER; scan: ScanDesc);
  132.   VAR index,retBut:CARDINAL;
  133.       mayEdit: BOOLEAN;
  134.       name: ARRAY [0..23] OF CHAR;
  135.       str: ARRAY [0..31] OF CHAR;
  136.       msg:ARRAY [0..109] OF CHAR;
  137.   BEGIN
  138.     GetStateMsg (errNo,str);
  139.     Concat ('Dateifehler:|',str,msg,strVal);
  140.     InitChain (scan);
  141.     index:= 1;
  142.     InputScan (msg,index);
  143.     Append ("|Datei: ",msg,strVal);
  144.     GetFileName (f,name);
  145.     Append (name,msg,strVal);
  146.     prepare (msg, TRUE, index, mayEdit);
  147.     FormAlert (2+ORD(mayEdit), msg, retBut);
  148.     IF retBut = 1 THEN
  149.       TermProcess (MOSGlobals.FileSystemErr)
  150.     ELSIF retBut = 3 THEN
  151.       ScanMode := TRUE;
  152.       ScanIndex:= index;
  153.       Assign (str,ErrorMsg,strVal);
  154.       TermProcess (MOSGlobals.FileSystemErr)
  155.     ELSE
  156.       ResetState (f)
  157.     END
  158.   END handleError0;
  159.  
  160.  
  161. (* Folgende Prozedur zeigt bei Prozeßende offen gebliebene Dateien an. *)
  162.  
  163. PROCEDURE closeFile0 (f: File; new:BOOLEAN);
  164.   VAR res: INTEGER;
  165.       retBut:CARDINAL;
  166.       msg1,msg: ARRAY [0..99] OF CHAR;
  167.       name: ARRAY [0..23] OF CHAR;
  168.       ch: CHAR;
  169.       strVal:BOOLEAN;
  170.   BEGIN
  171.     GetFileName (f,name);
  172.     Concat ('Datei ',name,msg,strVal);
  173.     Append ('|wurde nicht geschlossen.',msg,strVal);
  174.     IF new THEN
  175.       msg1 := '[1][][Schließen|Löschen]';
  176.     ELSE
  177.       msg1 := '[1][][Schließen]';
  178.     END;
  179.     Insert (msg,4,msg1,strVal);
  180.     FormAlert (1,msg1,retBut);
  181.     IF retBut=1 THEN
  182.       Close (f);
  183.       res:= State (f);
  184.       IF res<0 THEN
  185.         GetStateMsg (res,msg);
  186.         Insert ("[1][Fehler beim Schließen:|",0,msg,strVal);
  187.         Append ("][ OK ]",msg,strVal);
  188.         FormAlert (1,msg,retBut)
  189.       END
  190.     ELSE
  191.       Remove (f)
  192.     END
  193.   END closeFile0;
  194.  
  195.  
  196. (* Folgende Prozedur dient als Datenfeld mit allen Dateifehlertexten. *)
  197.  
  198. PROCEDURE fileMessages;
  199.   (*$L- : keinen Eingangscode erzeugen. *)
  200.   BEGIN
  201.     ASSEMBLER
  202. (* deutsche Meldungen: *)
  203.         DC.W    32767  ; default für undefinierte positive Fehlernummern:
  204.                         ACZ 'Undefinierte Warnung: @'  ASC '        '
  205.         DC.W    MOSGlobals.fNotDeleted
  206.                         ACZ 'Datei war nicht vorhanden'  ASC '      '
  207.         DC.W    MOSGlobals.fWasNotOpen
  208.                         ACZ 'Datei war nicht geöffnet'  ASC '       '
  209.         DC.W    MOSGlobals.fEOF
  210.                         ACZ 'Dateiende erreicht'  ASC '             '
  211.         DC.W    MOSGlobals.fEOL
  212.                         ACZ 'Zeilenende erreicht'  ASC '            '
  213.         DC.W    MOSGlobals.fOK
  214.                         ACZ 'Kein Fehler'  ASC '                    '
  215.         DC.W    MOSGlobals.fError
  216.                         ACZ 'Allgemeiner Fehler'  ASC '             '
  217.         DC.W    MOSGlobals.fDriveNotReady
  218.                         ACZ 'Laufwerk nicht ansprechbar'  ASC '     '
  219.         DC.W    MOSGlobals.fUnknownCmd
  220.                         ACZ 'Unbekannte Funktion'  ASC '            '
  221.         DC.W    MOSGlobals.fCRCError
  222.                         ACZ 'Prüfsummenfehler'  ASC '               '
  223.         DC.W    MOSGlobals.fBadRequest
  224.                         ACZ 'Unerlaubte Funktion'  ASC '            '
  225.         DC.W    MOSGlobals.fSeekError
  226.                         ACZ 'Disk defekt'  ASC '                    '
  227.         DC.W    MOSGlobals.fUnknownMedia
  228.                         ACZ 'Unbekanntes Disk-Format'  ASC '        '
  229.         DC.W    MOSGlobals.fSectorNotFound
  230.                         ACZ 'Sektor nicht vorhanden'  ASC '         '
  231.         DC.W    MOSGlobals.fNoPaper
  232.                         ACZ 'Drucker: Papierende'  ASC '            '
  233.         DC.W    MOSGlobals.fWriteFault
  234.                         ACZ 'Schreibfehler'  ASC '                  '
  235.         DC.W    MOSGlobals.fReadFault
  236.                         ACZ 'Lesefehler'  ASC '                     '
  237.         DC.W    MOSGlobals.fGenError
  238.                         ACZ 'Allgemeiner Disk-Fehler'  ASC '        '
  239.         DC.W    MOSGlobals.fWriteProtected
  240.                         ACZ 'Disk ist schreibgeschützt'  ASC '      '
  241.         DC.W    MOSGlobals.fMediaChanged
  242.                         ACZ 'Disk wurde gewechselt'  ASC '          '
  243.         DC.W    MOSGlobals.fUnknownDevice
  244.                         ACZ 'Unbekanntes Gerät o. Laufwerk'  ASC '  '
  245.         DC.W    MOSGlobals.fBadSectorsOnFormat
  246.                         ACZ 'Fehlerhafte Sektoren'  ASC '           '
  247.         DC.W    MOSGlobals.fInsertOtherDisk
  248.                         ACZ 'Disk wechseln (A<->B)'  ASC '          '
  249.         DC.W    MOSGlobals.fInvalidFunctionNr
  250.                         ACZ 'Unerlaubte Funktionsnummer'  ASC '     '
  251.         DC.W    MOSGlobals.fFileNotFound
  252.                         ACZ 'Datei existiert nicht'  ASC '          '
  253.         DC.W    MOSGlobals.fPathNotFound
  254.                         ACZ 'Directory existiert nicht'  ASC '      '
  255.         DC.W    MOSGlobals.fTooManyOpen
  256.                         ACZ 'Zu viele Dateien offen'  ASC '         '
  257.         DC.W    MOSGlobals.fAccessDenied
  258.                         ACZ 'Zugriff verwehrt'  ASC '               '
  259.         DC.W    MOSGlobals.fInvalidHandle
  260.                         ACZ 'Unerlaubte Zugriffskennung'  ASC '     '
  261.         DC.W    MOSGlobals.fInsufficientMemory
  262.                         ACZ 'Zu wenig Speicher'  ASC '              '
  263.         DC.W    MOSGlobals.fInvalidMemBlkAddr
  264.                         ACZ 'Speicherblock existiert nicht'  ASC '  '
  265.         DC.W    MOSGlobals.fInvalidDrive
  266.                         ACZ 'Unerlaubtes Laufwerk'  ASC '           '
  267.         DC.W    MOSGlobals.fDiffDrives
  268.                         ACZ 'Rename: verschiedene Laufwerke'  ASC ' '
  269.         DC.W    MOSGlobals.fNoMoreFiles
  270.                         ACZ 'Keine weiteren Dateien'  ASC '         '
  271.         DC.W    MOSGlobals.fRangeError
  272.                         ACZ 'Bereichsüberschreitung'  ASC '         '
  273.         DC.W    MOSGlobals.fInternalError
  274.                         ACZ 'Interner Fehler'  ASC '                '
  275.         DC.W    MOSGlobals.fBadFormatOfPrg
  276.                         ACZ 'Programmdatei defekt'  ASC '           '
  277.         DC.W    MOSGlobals.fResizeFailure
  278.                         ACZ 'Speicherblock nicht vergrößbar'  ASC ' '
  279.         DC.W    MOSGlobals.fOutOfMem
  280.                         ACZ 'Zu wenig Speicher'  ASC '              '
  281.         DC.W    MOSGlobals.fFileExists
  282.                         ACZ 'Datei existiert schon'  ASC '          '
  283.         DC.W    MOSGlobals.fNoReadAllowed
  284.                         ACZ 'Lesezugriff nicht erlaubt'  ASC '      '
  285.         DC.W    MOSGlobals.fFileNotClosed
  286.                         ACZ 'Datei noch offen'  ASC '               '
  287.         DC.W    MOSGlobals.fFileNotOpen
  288.                         ACZ 'Datei nicht offen'  ASC '              '
  289.         DC.W    MOSGlobals.fInternalErr1
  290.                         ACZ 'Interner Fehler (Pos>Length)'  ASC '   '
  291.         DC.W    MOSGlobals.fInternalErr2
  292.                         ACZ 'Interner Fehler (2)'  ASC '            '
  293.         DC.W    MOSGlobals.fBadOp
  294.                         ACZ 'Zugriff in falschem Modus'  ASC '      '
  295.         DC.W    MOSGlobals.fBadAccess
  296.                         ACZ 'Zugriff nicht erlaubt'  ASC '          '
  297.         DC.W    MOSGlobals.fEndOfFile
  298.                         ACZ 'Dateiende überschritten'  ASC '        '
  299.         DC.W    MOSGlobals.fDoubleUndo
  300.                         ACZ "Wiederholter 'UndoRead'-Aufruf"  ASC ' '
  301.         DC.W    MOSGlobals.fNameTooLarge
  302.                         ACZ 'Dateiname zu lang'  ASC '              '
  303.         DC.W    MOSGlobals.fDiskFull
  304.                         ACZ 'Disk ist voll'  ASC '                  '
  305.         DC.W    MOSGlobals.fIllegalCall
  306.                         ACZ 'Unerlaubter Funktionsaufruf'  ASC '    '
  307.         DC.W    -32768 ; default für undefinierte negative Fehlernummern:
  308.                         ACZ 'Undefinierter Fehler: @'  ASC '        '
  309.  
  310. (* english messages:
  311.         DC.W    32767  ; default für undefinierte positive Fehlernummern:
  312.                         ACZ 'Undefined warning: @'  ASC '           '
  313.         DC.W    MOSGlobals.fNotDeleted
  314.                         ACZ 'File did not exist'  ASC '             '
  315.         DC.W    MOSGlobals.fWasNotOpen
  316.                         ACZ 'File wasn't open'  ASC '               '
  317.         DC.W    MOSGlobals.fEOF
  318.                         ACZ 'End of file'  ASC '                    '
  319.         DC.W    MOSGlobals.fEOL
  320.                         ACZ 'End of line'  ASC '                    '
  321.         DC.W    MOSGlobals.fOK
  322.                         ACZ 'No error'  ASC '                       '
  323.         DC.W    MOSGlobals.fError
  324.                         ACZ 'General error'  ASC '                  '
  325.         DC.W    MOSGlobals.fDriveNotReady
  326.                         ACZ 'Drive not ready'  ASC '                '
  327.         DC.W    MOSGlobals.fUnknownCmd
  328.                         ACZ 'Unknown command'  ASC '                '
  329.         DC.W    MOSGlobals.fCRCError
  330.                         ACZ 'CRC error'  ASC '                      '
  331.         DC.W    MOSGlobals.fBadRequest
  332.                         ACZ 'Bad request'  ASC '                    '
  333.         DC.W    MOSGlobals.fSeekError
  334.                         ACZ 'Seek error'  ASC '                     '
  335.         DC.W    MOSGlobals.fUnknownMedia
  336.                         ACZ 'Unknown media'  ASC '                  '
  337.         DC.W    MOSGlobals.fSectorNotFound
  338.                         ACZ 'Sector not found'  ASC '               '
  339.         DC.W    MOSGlobals.fNoPaper
  340.                         ACZ 'Out of paper'  ASC '                   '
  341.         DC.W    MOSGlobals.fWriteFault
  342.                         ACZ 'Write fault'  ASC '                    '
  343.         DC.W    MOSGlobals.fReadFault
  344.                         ACZ 'Read fault'  ASC '                     '
  345.         DC.W    MOSGlobals.fGenError
  346.                         ACZ 'General disk error'  ASC '             '
  347.         DC.W    MOSGlobals.fWriteProtected
  348.                         ACZ 'Disk is write-protected'  ASC '        '
  349.         DC.W    MOSGlobals.fMediaChanged
  350.                         ACZ 'Media change detected'  ASC '          '
  351.         DC.W    MOSGlobals.fUnknownDevice
  352.                         ACZ 'Unknown device'  ASC '                 '
  353.         DC.W    MOSGlobals.fBadSectorsOnFormat
  354.                         ACZ 'Bad sectors on format'  ASC '          '
  355.         DC.W    MOSGlobals.fInsertOtherDisk
  356.                         ACZ 'Insert other disk'  ASC '              '
  357.         DC.W    MOSGlobals.fInvalidFunctionNr
  358.                         ACZ 'Invalid function number'  ASC '        '
  359.         DC.W    MOSGlobals.fFileNotFound
  360.                         ACZ 'File not found'  ASC '                 '
  361.         DC.W    MOSGlobals.fPathNotFound
  362.                         ACZ 'Path not found'  ASC '                 '
  363.         DC.W    MOSGlobals.fTooManyOpen
  364.                         ACZ 'Handle pool exhausted'  ASC '          '
  365.         DC.W    MOSGlobals.fAccessDenied
  366.                         ACZ 'Access denied'  ASC '                  '
  367.         DC.W    MOSGlobals.fInvalidHandle
  368.                         ACZ 'Invalid handle'  ASC '                 '
  369.         DC.W    MOSGlobals.fInsufficientMemory
  370.                         ACZ 'Insufficient memory'  ASC '            '
  371.         DC.W    MOSGlobals.fInvalidMemBlkAddr
  372.                         ACZ 'Invalid memory block address'  ASC '   '
  373.         DC.W    MOSGlobals.fInvalidDrive
  374.                         ACZ 'Invalid drive specification'  ASC '    '
  375.         DC.W    MOSGlobals.fDiffDrives
  376.                         ACZ 'Rename: different drives spec.'  ASC ' '
  377.         DC.W    MOSGlobals.fNoMoreFiles
  378.                         ACZ 'No more files'  ASC '                  '
  379.         DC.W    MOSGlobals.fRangeError
  380.                         ACZ 'Range error'  ASC '                    '
  381.         DC.W    MOSGlobals.fInternalError
  382.                         ACZ 'GEMDOS internal error'  ASC '          '
  383.         DC.W    MOSGlobals.fBadFormatOfPrg
  384.                         ACZ 'Invalid executable file format'  ASC ' '
  385.         DC.W    MOSGlobals.fResizeFailure
  386.                         ACZ 'Memory block growth failure'  ASC '    '
  387.         DC.W    MOSGlobals.fOutOfMem
  388.                         ACZ 'Insufficient memory'  ASC '            '
  389.         DC.W    MOSGlobals.fFileExists
  390.                         ACZ 'File exists'  ASC '                    '
  391.         DC.W    MOSGlobals.fNoReadAllowed
  392.                         ACZ 'Read access not allowed'  ASC '        '
  393.         DC.W    MOSGlobals.fFileNotClosed
  394.                         ACZ 'File not closed'  ASC '                '
  395.         DC.W    MOSGlobals.fFileNotOpen
  396.                         ACZ 'File not opened'  ASC '                '
  397.         DC.W    MOSGlobals.fInternalErr1
  398.                         ACZ 'Internal error (Pos>Length)'  ASC '    '
  399.         DC.W    MOSGlobals.fInternalErr2
  400.                         ACZ 'Internal error (2)'  ASC '             '
  401.         DC.W    MOSGlobals.fBadOp
  402.                         ACZ 'Bad access mode'  ASC '                '
  403.         DC.W    MOSGlobals.fBadAccess
  404.                         ACZ 'Read or write not allowed here'  ASC ' '
  405.         DC.W    MOSGlobals.fEndOfFile
  406.                         ACZ 'End of file reached'  ASC '            '
  407.         DC.W    MOSGlobals.fDoubleUndo
  408.                         ACZ "Repeated 'UndoRead' call"  ASC '       '
  409.         DC.W    MOSGlobals.fNameTooLarge
  410.                         ACZ 'File name too long'  ASC '             '
  411.         DC.W    MOSGlobals.fDiskFull
  412.                         ACZ 'Disk full'  ASC '                      '
  413.         DC.W    MOSGlobals.fIllegalCall
  414.                         ACZ 'Illegal function call'  ASC '          '
  415.         DC.W    -32768 ; default für undefinierte negative Fehlernummern:
  416.                         ACZ 'Undefined error: @'  ASC '             '
  417. *)
  418.         DC.W  0,0       ; Endekennzeichnung für die Liste
  419.     END
  420.   END fileMessages;
  421.   (*$L=*)
  422.  
  423. (* Folgende Prozedur dient als Datenfeld mit allen Laufzeitfehlertexten. *)
  424.  
  425. PROCEDURE errMessages;
  426.   (*$L- : keinen Eingangscode erzeugen. *)
  427.   BEGIN
  428.     ASSEMBLER
  429.         DC.W  -32768  ; default für undefinierte Fehlernummern:
  430.                         ACZ 'Undefinierter Fehler: @'  ASC '        '
  431.  
  432.         DC.W    MOSGlobals.NoErr
  433.                         ACZ 'Kein Fehler'  ASC '                    '
  434.         DC.W    MOSGlobals.GeneralErr
  435.                         ACZ 'Genereller Fehler'  ASC '              '
  436.         DC.W    MOSGlobals.BusFault
  437.                         ACZ 'Adresse nicht ansprechbar'  ASC '      '
  438.         DC.W    MOSGlobals.OddBusAddr
  439.                         ACZ 'Zugriff auf ungerade Adresse'  ASC '   '
  440.         DC.W    MOSGlobals.IllegalInstr
  441.                         ACZ 'Unbekannte Maschinenanweisung'  ASC '  '
  442.         DC.W    MOSGlobals.DivByZero
  443.                         ACZ 'Division durch Null'  ASC '            '
  444.         DC.W    MOSGlobals.OutOfRange
  445.                         ACZ 'Bereichsüberschreitung'  ASC '         '
  446.         DC.W    MOSGlobals.Overflow
  447.                         ACZ 'Überlauf'  ASC '                       '
  448.         DC.W    MOSGlobals.StringOverflow
  449.                         ACZ 'String-Überlauf'  ASC '                '
  450.         DC.W    MOSGlobals.NoValidRETURN
  451.                         ACZ 'Fehlende RETURN-Anweisung'  ASC '      '
  452.         DC.W    MOSGlobals.OutOfStack
  453.                         ACZ 'Stacküberlauf'  ASC '                  '
  454.         DC.W    MOSGlobals.HALTInstr
  455.                         ACZ 'HALT - Anweisung'  ASC '               '
  456.         DC.W    MOSGlobals.FileSystemErr
  457.                         ACZ 'Fehler im Dateisystem'  ASC '          '
  458.         DC.W    MOSGlobals.OutOfMemory
  459.                         ACZ 'Ungenügend freier Speicher'  ASC '     '
  460.         DC.W    MOSGlobals.IllegalCall
  461.                         ACZ 'Unerlaubter Funktionsaufruf'  ASC '    '
  462.         DC.W    MOSGlobals.CoroutineRtn
  463.                         ACZ 'Rückkehr aus Coroutine'  ASC '         '
  464.         DC.W    MOSGlobals.InternalFault
  465.                         ACZ 'Interner Fehler'  ASC '                '
  466.         DC.W    MOSGlobals.IllegalProcVar
  467.                         ACZ 'Undefinierte PROCEDURE-Var.'  ASC '    '
  468.         DC.W    MOSGlobals.IllegalPointer
  469.                         ACZ 'Uninitialisierte POINTER-Var.'  ASC '  '
  470.         DC.W    MOSGlobals.UserBreak
  471.                         ACZ 'Abbruch durch den Anwender'  ASC '     '
  472.         DC.W    MOSGlobals.IllegalState
  473.                         ACZ 'Interner Statusfehler'  ASC '          '
  474.         DC.W    MOSGlobals.Exception
  475.                         ACZ 'Diverse Exception'  ASC '              '
  476.         DC.W    MOSGlobals.GenFPErr
  477.                         ACZ 'Div. Floating-Point Fehler'  ASC '     '
  478.         DC.W    MOSGlobals.CaseSelectErr
  479.                         ACZ 'Unerfüllte CASE-Anweisung'  ASC '      '
  480.         DC.W    MOSGlobals.ConfigErr
  481.                         ACZ 'Fataler Konfigurationsfehler'  ASC '   '
  482.         DC.W    MOSGlobals.IllegalClosure
  483.                         ACZ 'Zuweisung lokaler Prozedur'  ASC '     '
  484.         DC.W    MOSGlobals.GemErr
  485.                         ACZ 'Fehler bei letztem GEM-Aufruf'  ASC '  '
  486.  
  487. (*  English (?) error messages:
  488.         DC.W  -32768  ; default für undefinierte Fehlernummern:
  489.                         ACZ 'Undefined error: @'  ASC '             '
  490.         DC.W  MOSGlobals.NoErr
  491.                         ACZ 'No error'  ASC '                       '
  492.         DC.W  MOSGlobals.GeneralErr
  493.                         ACZ 'General error'  ASC '                  '
  494.         DC.W  MOSGlobals.BusFault
  495.                         ACZ 'Bus error'  ASC '                      '
  496.         DC.W  MOSGlobals.OddBusAddr
  497.                         ACZ 'Address error'  ASC '                  '
  498.         DC.W  MOSGlobals.IllegalInstr
  499.                         ACZ 'Illegal instruction'  ASC '            '
  500.         DC.W  MOSGlobals.DivByZero
  501.                         ACZ 'Division by zero'  ASC '               '
  502.         DC.W  MOSGlobals.OutOfRange
  503.                         ACZ 'Out of range'  ASC '                   '
  504.         DC.W  MOSGlobals.Overflow
  505.                         ACZ 'Overflow'  ASC '                       '
  506.         DC.W  MOSGlobals.StringOverflow
  507.                         ACZ 'String overflow'  ASC '                '
  508.         DC.W  MOSGlobals.NoValidRETURN
  509.                         ACZ 'No valid RETURN from function'  ASC '  '
  510.         DC.W  MOSGlobals.OutOfStack
  511.                         ACZ 'Out of stack space'  ASC '             '
  512.         DC.W  MOSGlobals.HALTInstr
  513.                         ACZ 'HALT encountered'  ASC '               '
  514.         DC.W  MOSGlobals.FileSystemErr
  515.                         ACZ 'Error in file system'  ASC '           '
  516.         DC.W  MOSGlobals.OutOfMemory
  517.                         ACZ 'Out of memory'  ASC '                  '
  518.         DC.W  MOSGlobals.IllegalCall
  519.                         ACZ 'Illegal function call'  ASC '          '
  520.         DC.W  MOSGlobals.CoroutineRtn
  521.                         ACZ 'Return from coroutine'  ASC '          '
  522.         DC.W  MOSGlobals.InternalFault
  523.                         ACZ 'Internal error'  ASC '                 '
  524.         DC.W  MOSGlobals.IllegalProcVar
  525.                         ACZ 'Undefined PROCEDURE variable'  ASC '   '
  526.         DC.W  MOSGlobals.IllegalPointer
  527.                         ACZ 'Undefined pointer variable'  ASC '     '
  528.         DC.W  MOSGlobals.UserBreak
  529.                         ACZ 'Interrupt by user'  ASC '              '
  530.         DC.W  MOSGlobals.IllegalState
  531.                         ACZ 'Internal state fault'  ASC '           '
  532.         DC.W  MOSGlobals.Exception
  533.                         ACZ 'Unspecified exception'  ASC '          '
  534.         DC.W  MOSGlobals.GenFPErr
  535.                         ACZ 'General Floating-Point error'  ASC '   '
  536.         DC.W  MOSGlobals.CaseSelectErr
  537.                         ACZ 'CASE selection error'  ASC '           '
  538.         DC.W  MOSGlobals.ConfigErr
  539.                         ACZ 'Fatal configuration error'  ASC '      '
  540.         DC.W  MOSGlobals.IllegalClosure
  541.                         ACZ 'Assignment of local procedure'  ASC '  '
  542.         DC.W  MOSGlobals.GemErr
  543.                         ACZ 'Error at last GEM-call'  ASC '         '
  544. *)
  545.  
  546.         DC.W  0,0       ; Endekennzeichnung für die Liste
  547.     END
  548.   END errMessages;
  549.   (*$L=*)
  550.  
  551.  
  552. VAR stck: MemArea;
  553.     rHdl: RemovalCarrier;
  554.     ok: BOOLEAN;
  555.     gemHdl: GemHandle;
  556.  
  557. PROCEDURE freeSys;
  558.   BEGIN
  559.     ExitGem (gemHdl);
  560.     ReleaseCatcher (bye)
  561.   END freeSys;
  562.  
  563. BEGIN
  564.   SysInitApplication (ok);
  565.   gemHdl:= CurrGemHandle ();
  566.   CatchRemoval (rHdl, freeSys, stck);
  567.  
  568.   (* Abfangen aller Fehlermeldungen: *)
  569.   stck.bottom := ADR (HdlErrorStack);
  570.   stck.length := SIZE (HdlErrorStack);
  571.   IF ~SysCatchErrors (bye,stck) THEN OutOfMemory END;
  572.   CloseFile:= closeFile0;
  573.   HandleError:= handleError0;
  574.   FileErrMsg:= ADDRESS (fileMessages);
  575.   RuntimeErrMsg:= ADDRESS (errMessages);
  576.   
  577.   NEW (LoaderMsg);
  578.   IF LoaderMsg = NIL THEN OutOfMemory END;
  579.   
  580.   (* Fehlertexte des Moduls 'Loader' in Englisch:
  581.   LoaderMsg^[0]:=  "Can't find @I";
  582.   LoaderMsg^[1]:=  'Importing @I into @C: file not found';
  583.   LoaderMsg^[2]:=  'File @I is physically damaged';
  584.   LoaderMsg^[3]:=  'Illegal data in @I';
  585.   LoaderMsg^[4]:=  'Bad layout of @I';
  586.   LoaderMsg^[5]:=  'Conflict of versions between @I and @C';
  587.   LoaderMsg^[6]:=  'Out of memory';
  588.   LoaderMsg^[7]:=  '@I is resident'; (* linked / schon initialisiert *)
  589.   LoaderMsg^[8]:=  'Illegal module name';
  590.   LoaderMsg^[9]:=  'Nesting of module calls too deep';
  591.   LoaderMsg^[10]:= 'Program can't be executed';
  592.   LoaderMsg^[11]:= 'Program not found';
  593.   LoaderMsg^[12]:= 'Initialization of environment failed';
  594.   LoaderMsg^[13]:= 'De-initialization of environment failed';
  595.   LoaderMsg^[14]:= '"@I" is compressed';
  596.   LoaderMsg^[15]:= '"@I" has wrong real format';
  597.   LoaderMsg^[16]:= '"@I": wrong FPU type (ST<->TT)';
  598.   LoaderMsg^[17]:= 'Too many modules to initialize';
  599.   *)
  600.   
  601.   (* Fehlertexte des Moduls 'Loader' in Deutsch: *)
  602.   LoaderMsg^[0]:=  '"@I" nicht vorhanden';
  603.   LoaderMsg^[1]:=  '"@I" beim Importieren in "@C" nicht gefunden';
  604.   LoaderMsg^[2]:=  '"@I" ist defekt';
  605.   LoaderMsg^[3]:=  'Unerlaubte Daten in "@I"';
  606.   LoaderMsg^[4]:=  'Unerlaubtes Layout von "@I"';
  607.   LoaderMsg^[5]:=  'Versionskonflikt zwischen "@I" und "@C"';
  608.   LoaderMsg^[6]:=  'Kein ausreichender Speicherplatz mehr';
  609.   LoaderMsg^[7]:=  '"@I" ist resident und schon initialisiert';
  610.   LoaderMsg^[8]:=  'Unerlaubter Modulname';
  611.   LoaderMsg^[9]:=  'Zu viele verschachtelte Modulaufrufe';
  612.   LoaderMsg^[10]:= 'Programm ist nicht ausführbar';
  613.   LoaderMsg^[11]:= 'Programm nicht gefunden';
  614.   LoaderMsg^[12]:= 'Laufzeitfehler während Initialisierung';
  615.   LoaderMsg^[13]:= 'Laufzeitfehler während Deinitialisierung';
  616.   LoaderMsg^[14]:= '"@I" ist komprimiert';
  617.   LoaderMsg^[15]:= '"@I" hat falsches Real-Format';
  618.   LoaderMsg^[16]:= '"@I": falscher FPU-Typ (ST<->TT)';
  619.   LoaderMsg^[17]:= 'Zu viele Module zu initialisieren';
  620.  
  621. END GEMError.
  622.